/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SubsitemaAgenda;

import LlamadasTelefonicas.DialogoInfoLlamadaTelefonica;
import LlamadasTelefonicas.LlamadaTelefonica;
import clienteSandraParada.Login;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.swing.AbstractCellEditor;
import javax.swing.DefaultCellEditor;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;

/**
 *
 * @author mario
 */
public class DialogoCitasNoConfirmadas extends javax.swing.JDialog {

    ArrayList<Integer> filasModificadas;
    List<service.Cita> list;
    JComboBox comboBox;
    Dia dia;
    Semana semana;
    DialogoInfoLlamadaTelefonica formulario = new DialogoInfoLlamadaTelefonica(null, true, new LlamadaTelefonica());

    public DialogoCitasNoConfirmadas(java.awt.Frame parent, boolean modal, List<service.Cita> list, Dia dia, Semana semana) {
        super(parent, modal);
        this.setTitle("Citas no confirmadas");
        this.list = list;
        this.dia = dia;
        this.semana = semana;
        filasModificadas = new ArrayList<Integer>();
        setIconImage(new ImageIcon(getClass().getResource("/GUI/Img/logo2.png")).getImage());
        initComponents();
        ocultarColumnaID();
        String[] items = {"No Confirmada", "Confirmada"};
        comboBox = new JComboBox(items);
        comboBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                if (tablaContenedora.getSelectedRow() != -1 && !filasModificadas.contains(tablaContenedora.getSelectedRow())) {
                    filasModificadas.add(tablaContenedora.getSelectedRow());
                }
            }
        });
        llenarTabla();
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (!p.isModificarcitasNoConfirmadas()) {
            tablaContenedora.setEnabled(false);
            botonGuardar.setEnabled(false);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane3 = new javax.swing.JScrollPane();
        tablaContenedora = new javax.swing.JTable();
        botonGuardar = new javax.swing.JButton();
        botonCancelar = new javax.swing.JButton();
        botonRegistrarLlamada = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        tablaContenedora.setAutoCreateRowSorter(true);
        tablaContenedora.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "Nombre paciente", "Rut paciente", "Nombre profesional", "Rut Profesional", "Telefono", "Fecha", "Hora", "Estado"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Long.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false, false, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane3.setViewportView(tablaContenedora);

        botonGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Aceptar.png"))); // NOI18N
        botonGuardar.setText("Guardar");
        botonGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonGuardarActionPerformed(evt);
            }
        });

        botonCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Cancelar.png"))); // NOI18N
        botonCancelar.setText("Cancelar");
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        botonRegistrarLlamada.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Telefono.png"))); // NOI18N
        botonRegistrarLlamada.setText("Registrar llamada");
        botonRegistrarLlamada.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonRegistrarLlamadaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 849, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(botonRegistrarLlamada)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(botonGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 399, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(botonGuardar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(botonRegistrarLlamada, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
    }//GEN-LAST:event_botonCancelarActionPerformed

    private void botonGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonGuardarActionPerformed
        this.dispose();
        ArrayList<service.Cita> list = new ArrayList<service.Cita>();
        for (int i = 0; i < tablaContenedora.getRowCount(); i++) {
            if (tablaContenedora.getModel().getValueAt(i, 8).equals("Confirmada")) {
                Long id = (Long) tablaContenedora.getValueAt(i, 0);
                service.Cita cita = (service.Cita) buscarCitaPorId(id);
                String valorAnterior = "Rut profesional:" + cita.getRutProfesional() + "\n" + "rut Paciente: " + cita.getRutPaciente()
                        + "\n" + "Fecha: " + cita.getFecha() + "\n" + "Desde hora: " + cita.getDesdeHora()
                        + "\n" + "Desde minuto: " + cita.getDesdeMinuto() + "\n" + "Número sesiones: " + cita.getNumeroSesion() + "\n" + "Observación: " + cita.getObservacion()
                        + "\n" + "Estado: " + cita.getEstado();
                cita.setEstado("Confirmada");
                String valorNuevo = "Rut profesional:" + cita.getRutProfesional() + "\n" + "rut Paciente: " + cita.getRutPaciente()
                        + "\n" + "Fecha: " + cita.getFecha() + "\n" + "Desde hora: " + cita.getDesdeHora()
                        + "\n" + "Desde minuto: " + cita.getDesdeMinuto() + "\n" + "Número sesiones: " + cita.getNumeroSesion() + "\n" + "Observación: " + cita.getObservacion()
                        + "\n" + "Estado: " + cita.getEstado();
                modificarCita(cita);
                registrar(Login.getUser(), "Agenda", "Modificó cita", valorAnterior, valorNuevo);
            }
        }

        if (dia != null) {
            dia.llenarTabla();
            dia.jTabbedPane1.removeAll();
            dia.jTable1.repaint();
        } else {
            semana.llenarTabla();
            semana.jTabbedPane1.removeAll();
            semana.jTable1.repaint();
        }

    }//GEN-LAST:event_botonGuardarActionPerformed

    private void botonRegistrarLlamadaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonRegistrarLlamadaActionPerformed
        // TODO add your handling code here:

        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isAgregarLlamadaTelefonica()) {
            if (-1 != tablaContenedora.getSelectedRow()) //Devuelve -1 si no esta seleccionada
            {
                formulario.limpiarCampos();
                formulario.habilitarCampos(true);
                formulario.setTitle("Agregar Llamada Telefónica");
                formulario.botonFormularioAccion.setText("Agregar");
                formulario.botonFormularioAccion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Agregar.png")));
                formulario.campoFecha.setDate(obtenerFechaSistema());
                formulario.campoHora.setText(obtenerHoraSistema());
                formulario.getMensajesAdvertencia().setText("Área de mensajería");
                formulario.camposObligatoriosVisibles(true);
                int fila = tablaContenedora.getSelectedRow();
                formulario.campoNombreProfesional.addItem(tablaContenedora.getValueAt(fila, 3));
                formulario.campoNombreProfesional.setSelectedItem(tablaContenedora.getValueAt(fila, 3));
                formulario.campoRutProfesional.setText((String) tablaContenedora.getValueAt(fila, 4));
                formulario.campoNombrePaciente.addItem(tablaContenedora.getValueAt(fila, 1));
                formulario.campoNombrePaciente.setSelectedItem(tablaContenedora.getValueAt(fila, 1));
                formulario.campoRutPaciente.setText((String) tablaContenedora.getValueAt(fila, 2));
                service.Paciente paciente = (service.Paciente) cargarPaciente((String) tablaContenedora.getValueAt(fila, 2));
                formulario.campoTelefono.getTelefono().setText(paciente.getTelefono());
                formulario.campoCelular.getCelular().setText(paciente.getCelular());

                formulario.setVisible(true);
            } else {
                JOptionPane.showMessageDialog(this, "Debe seleccionar una fila!", "Advertencia", JOptionPane.WARNING_MESSAGE);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonRegistrarLlamadaActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonCancelar;
    private javax.swing.JButton botonGuardar;
    private javax.swing.JButton botonRegistrarLlamada;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTable tablaContenedora;
    // End of variables declaration//GEN-END:variables

    private Date obtenerFechaSistema() {
        Calendar c = Calendar.getInstance();
        String strFecha = Integer.toString(c.get(Calendar.DATE)) + "-"
                + Integer.toString(c.get(Calendar.MONTH) + 1) + "-"
                + Integer.toString(c.get(Calendar.YEAR));
        return formulario.stringToDate(strFecha);

    }

    private String obtenerHoraSistema() {
        Calendar c = Calendar.getInstance();
        String hora = (Integer.toString(c.get(Calendar.HOUR_OF_DAY)) + ":"
                + Integer.toString(c.get(Calendar.MINUTE)) + ":"
                + Integer.toString(c.get(Calendar.SECOND)) + " hrs.");
        return hora;
    }

    private void llenarTabla() {

        DefaultTableModel model = (DefaultTableModel) tablaContenedora.getModel();
        for (int i = 0; i < list.size(); i++) {
            service.Paciente p = (service.Paciente) cargarPaciente(list.get(i).getRutPaciente());
            service.Usuario u = (service.Usuario) cargarUsuario(list.get(i).getRutProfesional());
            String hora = list.get(i).getDesdeHora() + "", min = list.get(i).getDesdeMinuto() + "";
            if (list.get(i).getDesdeHora() < 10) {
                hora = "0" + list.get(i).getDesdeHora();
            }
            if (list.get(i).getDesdeMinuto() < 10) {
                min = "0" + list.get(i).getDesdeMinuto();
            }
        String celular = p.getCelular();
        String telefono = p.getTelefono();
        String contacto = "";        
        if(!celular.equals("") && !telefono.equals(""))
            contacto = celular+"/"+telefono;
        else if(!celular.equals(""))
            contacto = celular;
        else if(!telefono.equals(""))
            contacto = telefono;
            Object fila[] = {list.get(i).getId(), p.getNombres() + " " + p.getApellidoPaterno() + " " + p.getApellidoMaterno(), list.get(i).getRutPaciente(),
                u.getNombres() + " " + u.getApellidoPaterno() + " " + u.getApellidoMaterno(), list.get(i).getRutProfesional(), contacto, new SimpleDateFormat("dd/MM/yyyy").format(list.get(i).getFecha().toGregorianCalendar().getTime()), hora + ":" + min, list.get(i).getEstado()};
            model.addRow(fila);
        }
        tablaContenedora.getColumnModel().getColumn(8).setCellEditor(new DefaultCellEditor(comboBox));
    }

    public void ocultarColumnaID() {
        tablaContenedora.getColumnModel().getColumn(0).setMaxWidth(0);
        tablaContenedora.getColumnModel().getColumn(0).setMinWidth(0);
        tablaContenedora.getColumnModel().getColumn(0).setPreferredWidth(0);
    }

    private static Object cargarPaciente(java.lang.String rut) {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.cargarPaciente(rut);
    }

    private static boolean modificarCita(service.Cita arg0) {
        service.AgendaWS_Service service = new service.AgendaWS_Service();
        service.AgendaWS port = service.getAgendaWSPort();
        return port.modificarCita(arg0);
    }

    private static Object buscarCitaPorId(java.lang.Long id) {
        service.AgendaWS_Service service = new service.AgendaWS_Service();
        service.AgendaWS port = service.getAgendaWSPort();
        return port.buscarCitaPorId(id);
    }

    private static Object cargarPrivilegios(java.lang.String rut) {
        service.PrivilegiosWS_Service service = new service.PrivilegiosWS_Service();
        service.PrivilegiosWS port = service.getPrivilegiosWSPort();
        return port.cargarPrivilegios(rut);
    }

    private static Long registrar(service.Usuario usuario, java.lang.String modulo, java.lang.String accion, java.lang.String valorAnterior, java.lang.String valorNuevo) {
        service.BitacoraWSService service = new service.BitacoraWSService();
        service.BitacoraWS port = service.getBitacoraWSPort();
        return port.registrar(usuario, modulo, accion, valorAnterior, valorNuevo);
    }

    private static Object cargarUsuario(java.lang.String rut) {
        service.UsuarioWSService service = new service.UsuarioWSService();
        service.UsuarioWS port = service.getUsuarioWSPort();
        return port.cargarUsuario(rut);
    }
}
